Position BS(ArrPtr array, ElemSet x, Position left, Position right) {
    Position middle, ret;

    if (left > right) { /* 如果当前范围内没有元素了 */
        ret = NotFound; /* 返回查找不成功的标识 */
    } else {
        middle = (left + right) / 2; /* 计算序列中点坐标 */
        if (array->data[middle] > x) { /* 在左边的子序列中查找 */
            ret = BS(array, x, left, middle - 1);
        } else if (array->data[middle] < x) { /* 在右边的子序列中查找 */
            ret = BS(array, x, middle + 1, right);
        } else { /* 两者相等 */
            ret = middle; /* 查找成功，返回数据元素的下标 */
        }
    }
    return ret;
}

Position BinarySearch(ArrPtr array, ElemSet x) {
    return BS(array, x, 0, array->size - 1);
}